<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.72 [en] (WinNT; I) [Netscape]">
   <meta name="Author" content="Jacob Rosenschein">
   <meta name="Description" content="Release Notes for version 4.1 of the Directory SDK  for Java">
   <meta name="KeyWords" content="Java SDK, Directory SDK, LDAP SDK, SDK, LDAP, Directory, Netscape Directory, Netscape SDK, Java LDAP SDK">
   <title>Directory SDK 4.1 for Java Source Code Release Notes</title>
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" alink="#FF0000">

<center>
<h2>
<font face="Arial,Helvetica">Directory SDK 4.1 for Java Source Code Release
Notes</font></h2></center>

<center>Last Updated May 06, 2000</center>

<p>These release notes contain information about:
<ul>
<li>
<a href="#new41">What's New in Version 4.1</a></li>

<li>
<a href="#fixed40">Bugs Fixed Since Version 4.0</a></li>

<li>
<a href="#new">What's New in Version 4.0</a></li>

<li>
<a href="#fixed305">Bugs Fixed Since Version 3.05</a></li>

<li>
<a href="#install">Downloading and Building the Source</a></li>

<li>
<a href="#update">Updating Java Classes in Netscape Communicator</a></li>

<li>
<a href="#report">Reporting Problems</a></li>

<li>
<a href="#newsgroup">Accessing the Directory Developers Newsgroup</a></li>
</ul>
For the latest documentation, see the <i><a href="http://developer.iplanet.com/docs/manuals/dirsdk/jsdk40/contents.htm" TARGET="_top">Netscape
Directory SDK 4.0 for Java Programmer's Guide</a></i>, which is available
on the iPlanet Developer Documentation site.
<p>Reference materials for the Directory SDK 4.x for Java are produced
using the Javadoc utility. They are available in the <tt>/dist/doc/</tt>
directory where you installed the SDK or online at:
<br><tt><a href="http://developer.iplanet.com/docs/manuals/dirsdk/jsdk40/Reference/index.html">http://developer.iplanet.com/docs/manuals/dirsdk/jsdk40/Reference/index.html</a>.</tt>
<p>If you only want the Directory SDK 4.x for Java (not the source code),
you can download it from the <a href="http://www.iplanet.com/downloads/developer/index.html">iPlanet
Developer Downloads</a> site.
<p>
<hr SIZE=1 NOSHADE WIDTH="100%">
<br><a NAME="new41"></a><b><font face="Arial,Helvetica"><font size=+1>What's
New in Version 4.1</font></font></b>
<p>The Directory SDK 4.1 for Java is a bug fix relase. Please check the
list of <a href="#fixed40">Bugs Fixed Since Version 4.0</a>. The following
new features have been added in this release:
<ul>
<li>
A new class, <tt>netscape.ldap.factory.JSSESocketFactory</tt>. It implements
the <tt>LDAPSocketFactory</tt> interface using the Java Secure Socket Extension
(JSSE)&nbsp; intefaces as the SSL provider. A JSSE implementation is not
packaged with the Directory SDK classes; you will need to have one in your
CLASSPATH to be able to use <tt>JSSESocketFactory</tt>.&nbsp; A reference
implementation of JSSE interfaces is available at <a href="http://java.sun.com/products/jsse/">http://java.sun.com/products/jsse/</a>.</li>

<li>
A new interface,&nbsp; <tt>netscape.ldap.LDAPTraceWriter,</tt> enables
logging of LDAP trace messages in environments where an <tt>OutputStream</tt>
cannot be used. The interface is meant primarily for integrating LDAP tracing
with the servlet log facility.</li>

<li>
A new method <tt>setConnectTimeout() </tt>has been added to <tt>LDAPConnection.
</tt>This
method allows you to limit&nbsp; the amount of time that application code
waits for <tt>LDAPConnection.connnect() </tt>to establish a connection.
By setting the connect timeout, an application can avoid blocking for a
long period of time when a Directory Server host is down or unreachable.</li>

<li>
All base classes in the <tt>netscape.ldap</tt> and <tt>netscape.ldap.util</tt>
package are now serializable.</li>
</ul>

<hr SIZE=1 NOSHADE WIDTH="100%">
<br><a NAME="fixed40"></a><b><font face="Arial,Helvetica"><font size=+1>Bugs
Fixed Since Version 4.0</font></font></b>
<p>The following bugs have been fixed since the release of the Directory
SDK 4.0 for Java. iPlanet bug numbers are shown in parentheses.
<ul>
<li>
Bugzilla <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=28001">28001</a>:
Parsing in <tt>LDAPUrl(String url)</tt> ignores attributes if DN is empty.</li>

<li>
Bugzilla <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=28005">28005</a>:
Exceptions thrown in <tt>connect()</tt> and <tt>disconnect()</tt>.</li>

<li>
Bugzilla <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=13546">13546</a>:
<tt>JDAPFilterOpers</tt>
throws StringIndexOutOfBoundsException.</li>

<li>
Bugzilla <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=16514">16514</a>:
<tt>LDAPAttributeSet.removeElementAt()</tt>
doesn't remove the attribute completely.</li>

<li>
Bugzilla <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=34326">34326:</a><tt>
LDAPDN.unEscapeRDN()</tt> removes all /'s - not just the escape characters.</li>

<li>
Bugzilla <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=29262">29262:</a><tt>
LDAPSearch</tt> doesn't apply base64-encoding to to nonprintable DNs.</li>

<li>
Wrong user DN supplied for referral on bind operation. (364869)</li>

<li>
4.0 LDAPMatchingRuleSchema not binary compatible with 3.x.&nbsp; (365423)</li>

<li>
LDAP JDK does not properly abandon operation. (341439)</li>

<li>
<tt>RDN.equals()</tt> assumes case-insensitivity, ignores multiple values.
(365574)</li>

<li>
<tt>authenticate()</tt> with bad password does not throw exception. (366578)</li>

<li>
Should provide DSML option for LDAPSearch. (368416)</li>

<li>
Incorrect signature for <tt>LDAPResponseListener.merge()</tt>. (364775)</li>

<li>
MS JVM throws <tt>LDAPSortControl</tt> runtime exception. (365574)</li>

<li>
Need new method <tt>LDAPDN.equals( String dn1, String dn2)</tt>. (365575)</li>

<li>
Some 3.x <tt>LDAPSchema</tt> public methods are protected in 4.x. (381574)</li>

<li>
Server using VLV for non-search operations - 'Critical extension unavailable'
error in log. (382605)</li>

<li>
<tt>LDAPSearchResults.getCount()</tt> returns wrong count. (355336)</li>

<li>
<tt>LDAPCache.cleanup()</tt> throws NullPointerException. (388736)</li>

<li>
<tt>LDAPConnection.read()</tt> doesn't return subentries (387722)</li>

<li>
LDAP SDK 4.0 causes NAS crash. (390128)</li>

<li>
NullPointerException in <tt>deleteThreadConnEntry()</tt>. (389228)</li>

<li>
<tt>LDAPSchema.getSyntaxes()</tt> missing (I-D conformance). (388463)</li>

<li>
SASL bugs found at CMU. (391585)</li>

<li>
<tt>LDAPCompareAttrNames</tt> not consistently case-sensitive. (390382)</li>

<li>
<tt>LDAPEntry</tt> throws a null exception when reading non existing attribute
(388577)</li>

<li>
NullPointerException with Malformed Filter. (390249)</li>

<li>
LDAP objects not really serializable. (356821)</li>

<li>
<tt>LDAPSearch -l</tt> option does not work correctly (393676)</li>

<li>
NullPointerException in <tt>LDAPSearch</tt> (387453)</li>

<li>
<tt>java-object-schema.conf</tt> is not packaged with SDK. (390154)</li>

<li>
JNDI SP: <tt>LdapContextImpl.reconnect(null)</tt> throw null pointer exceptions
(383788)</li>
</ul>

<hr SIZE=1 NOSHADE WIDTH="100%">
<p><a NAME="new"></a><b><font face="Arial,Helvetica"><font size=+1>What's
New in Version 4.0</font></font></b>
<p>The Directory SDK 4.0 for Java provides programmers with the tools to
develop directory-enabled software.&nbsp; This release includes:
<ul>
<li>
Application Program Interface (API) updates to match the newest LDAP (Lightweight
Directory Access Protocol) internet drafts</li>

<li>
an asynchronous interface to LDAP</li>

<li>
a new SASL (Simple Authentication and Security Layer) API</li>

<li>
the Netscape LDAP Service Provider for LDAP.</li>
</ul>
Additional improvements and changes to the Directory SDK are listed under
<a href="#fixed305">Bugs
Fixed Since Version 3.05</a>.
<p><b><font face="Arial,Helvetica">API updates</font></b>
<p>The Directory SDK 4.0 for Java supports these changes to the LDAP API:
<ul>
<li>
Sophisticated client-side management of referral authentication using the
<tt>LDAPBind</tt>
interface.</li>

<li>
Dynamic registration and instantiation of server response controls using
the <tt>register</tt> and <tt>newInstance</tt> methods of <tt>LDAPControl</tt>.</li>

<li>
The separation of the constraint class into <tt>LDAPConstraints</tt> and
its subclass <tt>LDAPSearchConstraints</tt>. <tt>LDAPConstraints</tt> contains
only those methods implemented in the interface that apply to <i>all </i>operations.
<tt>LDAPSearchConstraints</tt>
is unchanged. All <tt>LDAPConnection</tt> methods that used to take <tt>LDAPSearchConstraints</tt>
as an argument (except for read and search methods) now pass <tt>LDAPConstraints</tt>
instead.</li>

<li>
When using <tt>LDAPConnection</tt> for searching, retrieval of server response
controls is now handled by <tt>LDAPSearchResults</tt>. Although the SDK
is backward compatible, you should call <tt>LDAPSearchResults.getResponseControls()</tt>
instead of <tt>LDAPConnection.getResponseControls()</tt>when writing new
code.</li>

<li>
<tt>LDAPConnection.getServerControls()</tt> now automatically parses controls.
As a result, calling <tt>parseResponse()</tt> is no longer necessary.</li>

<li>
Support for transparent failover connection policies. The available policies
are: (1) serial, (2) parallel with no delay, and (3) parallel with delay.
For more information, see <tt>LDAPConnection.setConnSetupDelay()</tt> in
the javadocs.</li>

<li>
<tt>LDAPConnection</tt> has a new method called <tt>reconnect()</tt>. This
method first disconnects and then connects and binds again using the same
parameters and mechanisms as the original connection..</li>

<li>
Support for connection pools. For more information see <tt>netscape.ldap.util.ConnectionPool</tt>
in the javadocs.</li>

<li>
The addition of <tt>LDAPInterruptedException</tt>, which is thrown if an
LDAP operation is interrupted.</li>

<li>
The addition of <tt>LDAPProxiedAuthControl</tt>, which can execute operations,
using different credentials, without rebinding.</li>

<li>
<tt>LDAPConnection</tt> now runs as a daemon thread. You no longer need
to call <tt>System.exit</tt> when terminating your program.</li>
</ul>
<b><font face="Arial,Helvetica">Asynchronous API</font></b>
<p>The Directory SDK 4.0 for Java provides an interface called
<tt>LDAPAsynchronousConnection</tt>.
This interface contains methods for performing LDAP operations asynchronously.
Instead of blocking while waiting for a response, methods in <tt>LDAPAsynchronousConnection</tt>
return control to an application before they complete. For more information
on the asynchronous interface, see "<a href="http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/asynch.htm">Using
the Asynchronous Interface</a>" in the <i><a href="http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/contents.htm">Netscape
Directory SDK 4.0 for Java Programmer's Guide</a></i>.
<p><b><font face="Arial,Helvetica">SASL API</font></b>
<p>SASL allows clients and servers to communicate securely. The API accomplishes
this by finding a common authentication scheme and facilitating a series
of challenge and response interchanges between the client and server. If
these interchanges complete successfully, the client is authenticated.
For more information on SASL see "<a href="http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/sasl.htm">Using
SASL Authentication</a>" in the <i><a href="http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/contents.htm">Netscape
Directory SDK 4.0 for Java Programmer's Guide</a></i>.
<p><b><font face="Arial,Helvetica">JNDI Service Provider for LDAP</font></b>
<p>JNDI is a Java API that provides a common way for programmers to access
a variety of naming and directory services. This is accomplished via a
layer of software called a Service Provider. The Directory SDK includes
a Service Provider for LDAP.
<p>The following JNDI features are not implemented in this release of the
Netscape LDAP Service Provider:
<ul>
<li>
Support for federated names</li>

<li>
Support for the "code base" attribute for objects stored in an LDAP directory.
The class name specified by the <tt>javaClassName</tt> attribute must exist
in the local <tt>CLASSPATH</tt></li>

<li>
The <tt>search()</tt> method for schema directory contexts. To perform
searches in a schema directory context use a <tt>Context.lookup()</tt>
request instead of <tt>DirContext.search()</tt>.</li>
</ul>
For more information see "<a href="http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/JNDIchap.htm">Using
the JNDI Service Provider</a>" in the <i><a href="http://developer.netscape.com/docs/manuals/dirsdk/jsdk40/contents.htm">Netscape
Directory SDK 4.0 for Java Programmer's Guide</a></i>.
<p>
<hr SIZE=1 NOSHADE WIDTH="100%">
<p><a NAME="fixed305"></a><b><font face="Arial,Helvetica"><font size=+1>Bugs
Fixed Since Version 3.05</font></font></b>
<p>The following bugs have been fixed since the release of the Directory
SDK 3.05 for Java. Bug numbers are shown in parentheses.
<ul>
<li>
<tt>LDAPSearchResults.getCount()</tt> returns 0 for synchronous searches.
(355365)</li>

<li>
Applets in Communicator can't fetch an error string. (351004)</li>

<li>
<tt>DN.contains()</tt> is implemented and documented incorrectly. (354615)</li>

<li>
Search timeout is not handled correctly. (350998)</li>

<li>
<tt>LDAPSchemaElement</tt> needs a <tt>modify()</tt> method. (350997)</li>

<li>
<tt>LDAPBasePropertySupport</tt> should enable referrals. (350996, 350995)</li>

<li>
Cannot set the cache once <tt>LDAPConnection</tt> has connected. (355904)</li>

<li>
<tt>LDAPCache</tt> changes the contents of returned attributes. (355942)</li>

<li>
The SDK calls <tt>Thread.stop()</tt>, <tt>suspend()</tt>, and <tt>resume()</tt>.
(354503)</li>

<li>
VLV controls don't support the optional context field. (355215)</li>

<li>
The SDK doesn't support all the schema options described in RFC 2252. (354347)</li>

<li>
LDAP Beans don't handle referrals. (353306)</li>

<li>
<tt>LDAPIsMember</tt> doesn't handle dynamic groups. (353305)</li>

<li>
The <tt>netscape.ldap.util.DN</tt> class does not consider <tt>""</tt>
to be a valid DN. (352804)</li>

<li>
<tt>LDAPCompareAttrNames</tt> should allow for the specification of a locale.
(351022)</li>

<li>
<tt>LDAPSearch</tt> aborts on a size limit exception. (350624)</li>

<li>
<tt>LDAPModificationSet</tt> is missing a <tt>toString</tt> method. (353308,
351719)</li>

<li>
<tt>LDAPGetEntries</tt> should allow a choice of which attributes to return.
(353307)</li>

<li>
The SDK should support the latest LDIF specification. (356470, 352056)</li>

<li>
The SDK should treat a <tt>"null"</tt> filter as meaning <tt>"objectclass=*"</tt>.
(354682)</li>

<li>
<tt>LDAPSchema</tt> contains unnecessary public <tt>"add"</tt> methods.
(354997)</li>
</ul>

<hr SIZE=1 NOSHADE WIDTH="100%">
<br><a NAME="install"></a><b><font face="Arial,Helvetica"><font size=+1>Downloading
and Building the Source</font></font></b>
<p>The Directory SDK source code is available on the Mozilla website. You
can download it at <a href="http://www.mozilla.org/directory/javasdk.html">http://www.mozilla.org/directory/javasdk.html</a>.
<p>Follow the instructions at <a href="http://www.mozilla.org/directory/buildjsdk-4.0.txt">http://www.mozilla.org/directory/buildjsdk-4.0.txt</a>
to build the Netscape Directory SDK.
<p>
<hr SIZE=1 NOSHADE WIDTH="100%"><a NAME="update"></a><b><font face="Arial,Helvetica"><font size=+1>Updating
Java Classes in Netscape Communicator</font></font></b>
<p>The LDAP Java classes contained in Netscape Communicator 4.7 and earlier
are outdated. You can upgrade these class files to the latest versions
using Communicator's SmartUpdate feature.
<p>The SmartUpdate page for the LDAP Java classes is at: <a href="http://developer.netscape.com/software/ldap/ldap.html">http://developer.netscape.com/software/ldap/ldap.html</a>
<p><b>Note: </b>This page uses Communicator's SmartUpdate feature to update
the classes. Before visiting this page, you must enable SmartUpdate, Java,
JavaScript, and cookies in Communicator.
<p><b><font face="Arial,Helvetica">To enable SmartUpdate, Java, JavaScript,
and cookies:</font></b>
<ul>
<li>
Go to the Edit menu and choose Preferences.</li>

<li>
Select Advanced and make sure that Accept all cookies is active (it's radio
button is filled).</li>

<li>
Make sure that Enable Java and Enable JavaScript are checked.</li>

<li>
Choose Advanced | SmartUpdate from the left-hand panel.</li>

<li>
Make sure that Enable SmartUpdate is checked.</li>

<li>
Click OK.</li>
</ul>

<hr SIZE=1 NOSHADE WIDTH="100%"><a NAME="report"></a><b><font face="Arial,Helvetica"><font size=+1>Reporting
Problems</font></font></b>
<p>Please submit your problem via the the <a href="http://bugzilla.mozilla.org">Bugzilla</a>
bugsystem . Use the "LDAP Java SDK" component.
<p>
<hr SIZE=1 NOSHADE WIDTH="100%"><a NAME="newsgroup"></a><b><font face="Arial,Helvetica"><font size=+1>Accessing
the Directory Developers Newsgroup</font></font></b>
<p>If you have additional questions or need more information about the
Netscape Directory SDK 4.x for Java, please visit the Mozilla <a href="news://news.mozilla.org/netscape.public.mozilla.directory">Directory
newsgroup</a> and the DevEdge <a href="http://developer.netscape.com/support/newsgroups/" TARGET="_top">Directory
Server newsgroups</a>.
<center>
<p>
<hr SIZE=1 NOSHADE WIDTH="100%"><font size=-1>Contains OROMatcher&reg;
regular expression software from ORO Java Software. <nobr>&copy; </nobr>Copyright
1997 by ORO Java Software.</font>
<br><font size=-1>Redistribution separate from Netscape Directory SDK for
Java or direct use of OROMatcher interfaces</font>
<br><font size=-1>requires a license from ORO Java Software. <a href="http://www.oroinc.com/" TARGET="_top">http://www.oroinc.com</a>.
OROMatcher&reg; is a trademark of Original Reusable Objects, Inc.</font>
<p><font size=-1>For more Internet development resources, try <a href="http://home.netscape.com/computing/techsearch/index.html?cp=dev01bnts" TARGET="_top">Netscape
TechSearch</a>.</font></center>

<hr SIZE=0 WIDTH="100%">
</body>
</html>
